openssl dhparam(密钥交换)

您所在的位置:网站首页 nginx dhparam openssl dhparam(密钥交换)

openssl dhparam(密钥交换)

2023-07-06 03:45| 来源: 网络整理| 查看: 265

openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

openssl dhparam用于生成和管理dh文件。dh(Diffie-Hellman)是著名的密钥交换协议,或称为密钥协商协议,它可以保证通信双方安全地交换密钥。但注意,它不是加密算法,所以不提供加密功能,仅仅只是保护密钥交换的过程。在openvpn中就使用了该交换协议。关于dh算法的整个过程,见下文。

openssl dhparam命令集合了老版本的openssl dh和openssl gendh,后两者可能已经失效了,即使存在也仅表示未来另有用途。

openssl dhparam [-in filename] [-out filename] [-dsaparam] [-noout] [-text] [-rand file(s)] [numbits] 选项说明: -in filename:从filename文件中读取密钥交换协议参数。 -out filename:输出密钥交换协议参数到filename文件。 -dsaparam:指定此选项将使用dsa交换协议替代dh交换协议。虽然生成速度更快,但更不安全。 -noout:禁止输出任何信息。 -text:以文本格式输出dh协议。 -rand:指定随机数种子文件。 numbits:指定生成的长度。

注意,dh协议文件生成速度随长度增长而急剧增长,使用随机数种子可以加快生成速度。

例如:生成1024长度的交换协议文件,其消耗的时间2秒不到。

[root@xuexi tmp]# time openssl dhparam -out dh.pem 1024 Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ..........+.................................................+....................+..+.................................+.........+..................+.............................................+ ...................................................................................................+..................................+............+...................+................+.......... .........................................................................................................................................................................................+......... ................................................................................................................................................+.............................................+.... ........................................+......................+.......................++*++*++* real 0m1.762s user 0m1.608s sys 0m0.017s

但生成长度2048的交换协议文件用了4分多钟,可见长度增长会导致协议生成的时间急剧增长。

[root@xuexi ~]# time openssl dhparam -out dh.pem 2048 ......... ......... real 4m36.606s user 4m14.404s sys 0m0.538s

而使用了64位随机数种子的同样命令只需50秒钟。

[root@xuexi tmp]# time openssl dhparam -rand rand.seed -out dh.pem 2048 ......... ......... real 0m50.264s user 0m46.039s sys 0m0.104s

openssl命令实现的是各种算法和加密功能,它的cpu的使用率会非常高,再结合dhparam,可以使得openssl dhparam作为一个不错的cpu压力测试工具,并且可以长时间飙高cpu使用率。

 

DH密钥协商过程:

密钥交换协议(DH)的大概过程是这样的(了解即可,可网上搜索完整详细的过程):

(1).双方协商一个较大的质数并共享,这个质数是种子数。

(2).双方都协商好一个加密生成器(一般是AES)。

(3).双方各自提出另一个质数,这次双方提出的质数是互相保密的。这个质数被认为是私钥(不是非对称加密的私钥)。

(4).双方使用自己的私钥(即各自保密的质数)、加密生成器以及种子数(即共享的质数)派生出一个公钥(由上面的私钥派生而来,不是非对称加密的公钥)。

(5).双方交换派生出的公钥。

(6).接收方使用自己的私钥(各自保密的质数)、种子数(共享的质数)以及接收到的对方公钥计算出共享密钥(session key)。尽管双方的session key是使用对方的公钥以及自己的私钥计算的,但因为使用的算法,能保证双方计算出的session key相同。

(7).这个session key将用于加密后续通信。例如,ssh连接过程中,使用host key对session key进行签名,然后验证指纹来完成主机认证的过程(见https://www.cnblogs.com/f-ck-need-u/p/7129122.html#blog131)。

在此可见,在计算session key过程中,双方使用的公钥、私钥是相反的。但因为DH算法的原因,它能保证双方生成的session key是一致的。而且因为双方在整个过程中是完全平等的,没有任何一方能掌控协商的命脉,再者session key没有在网络上进行传输,使得使用session key做对称加密的数据传输是安全的。

作者:骏马金龙 出处:http://www.cnblogs.com/f-ck-need-u/ Linux运维交流群:921383787

Linux系列文章:https://www.junmajinlong.com/linux/index/ Shell系列文章:https://www.junmajinlong.com/shell/index/ 网站架构系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html MySQL/MariaDB系列文章:https://www.cnblogs.com/f-ck-need-u/p/7586194.html Perl系列:https://www.junmajinlong.com/perl/index Go系列:https://www.cnblogs.com/f-ck-need-u/p/9832538.html Python系列:https://www.cnblogs.com/f-ck-need-u/p/9832640.html Ruby系列:https://www.junmajinlong.com/ruby/index 操作系统系列:https://www.junmajinlong.com/os/index/ 精通awk系列:https://www.junmajinlong.com/shell/awk/index



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3